開發Android時的那些筆記...!!
用PPT的方式,快速的認識:
Thread
HandlerThread
Handler
Message
MessageQuque
Looper
********************************
Thread
他是一個執行緒~
想像他是一位做工的工人
在Runnable::run() 實作給這工人做的工作事項(工作的說明書)
工作性質是一次性的,工作完成就閃人
可透過Thread Executor更簡易的去管理Thread
參考
Thread in Android
指UI (Main) Thread - 負責更新Android UI,任何非UI程式不該放在於此避免ANR(Application Not Responding)問題,複雜運算應另外在其他執行緒裡執行完後再回到UI Thread裡更新UI
讓程式丟給UI Thread跑的常見方法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
利用Handler、Message
HandlerThread
想像他是一位特約的工人
而Handler是這位特約工人的經紀人
常駐性的,做完工作就閒置等待下一個工作
在Runnable::run() 實作給這工人做的工作事項(工作的說明書)
mThreadHandler.post(Runnable) -> 請經紀人去連絡特約工人去執行工作
解約這個工人 mThread.quit()
參考
Handler
服務的窗口
目的:Thread之間的function callback
handleMessage(Message)
但Handler又要如何 transfer 至其它 Thread 呢?
[參考](http://milochen.wordpress.com/2011/03/25/understanding-android-os-src-looperhandler-message-messagequeue/<br />
)
Message
目的:將 Handler 包裝起來,傳送給其它 Thread
但是同時有多條Thread不斷在系統中傳遞Message,那該如何緩衝?
參考
MessageQuque
目的是為了讓 Message 能夠作緩衝,好讓Message先暫存起來。因此,當Message 已經被放在其它 Thread上的MessageQueue 之後,它裡面包著 Handler,而 Handler上的 callback function 總得有人來執行吧...
[參考](http://milochen.wordpress.com/2011/03/25/understanding-android-os-src-looperhandler-message-messagequeue/<br />
)
Looper
除了UI Thread以外,創建的工作執行緒預設是沒有消息循環或序列的
[參考](http://milochen.wordpress.com/2011/03/25/understanding-android-os-src-looperhandler-message-messagequeue/<br />
)
所以基本上上列所得的結果圖如下: